package com.wei.czz.framework.index.controller;

import java.util.List;
import java.util.Objects;
import java.util.Optional;

import com.wei.czz.common.dto.blog.comment.CommentDto;
import com.wei.czz.common.po.UserPo;
import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.tool.Result;
import com.wei.czz.common.utils.SecurityUtils;
import com.wei.czz.common.vo.blog.BlogCommentVo;
import com.wei.czz.framework.blog.manager.BlogCommentManager;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-08-24 22:48:40
 * className: CommentController 博客评论操作请求接口类
 * version: 1.0
 * description:
 */
@RestController
@RequestMapping("index/comment")
@AllArgsConstructor
public class BlogCommentIndexController {

    private static final Logger log = LoggerFactory.getLogger(BlogCommentIndexController.class);

    private final BlogCommentManager blogCommentManager;

    /**
     * 分页查询博客第一级评论列表接口
     *
     * 调用方：
     *  1、浏览器-博客详细页面调用
     * @param blogCommentVo 封装博客第一级评论列表请求参数的对象
     * @param request       http请求对象
     */
    @PostMapping("/one/list")
    public Result<PageDto<CommentDto>> getOneCommentList(@RequestBody BlogCommentVo blogCommentVo,
                                                         HttpServletRequest request) {
        log.info("开始分页查询第一级博客评论列表业务。{}", blogCommentVo);

        if (Objects.isNull(blogCommentVo.getBlogId())) {
            log.info("分页查询博客第一级评论列表接口请求参数错误！");
            return Result.paramFail();
        }
        if (blogCommentVo.getPage() == null || blogCommentVo.getLimit() == null || StringUtils.isBlank(blogCommentVo.getField())
            || StringUtils.isBlank(blogCommentVo.getOrder())) {
            log.info("分页查询博客第一级评论列表接口分页参数错误！");
            return Result.pageFail();
        }
        // 获取请求用户
        Optional<UserPo> optional = SecurityUtils.userPoOptional();
        optional.ifPresent(userPo -> blogCommentVo.setUserId(userPo.getUserId()));

        PageDto<CommentDto> page = blogCommentManager.getOneCommentList(blogCommentVo);

        log.info("分页查询第一级博客评论列表业务结束");
        return Result.success(page);
    }

    /**
     * 分页查询博客第一级评论下子评论列表接口
     *
     * 调用方：
     *  1、浏览器页面-博客详细页面调用
     * @param blogCommentVo 封装博客第一级评论下子评论列表请求参数的对象
     * @param request       http请求对象
     */
    @PostMapping("/child/list")
    public Result<List<CommentDto>> getChildrenComment(@RequestBody BlogCommentVo blogCommentVo,
                                                       HttpServletRequest request) {
        log.info("开始分页查询博客第一级评论下自评论列表业务。{}", blogCommentVo);

        if (Objects.isNull(blogCommentVo.getBlockId())) {
            log.info("分页查询博客第一级评论下子评论列表接口请求参数错误！");
            return Result.paramFail();
        }
        if (blogCommentVo.getPage() == null || blogCommentVo.getLimit() == null
                || StringUtils.isBlank(blogCommentVo.getField()) || StringUtils.isBlank(blogCommentVo.getOrder())) {
            log.info("分页查询博客第一级评论下子评论列表接口分页参数错误！");
            return Result.pageFail();
        }

        // 获取请求用户
        Optional<UserPo> optional = SecurityUtils.userPoOptional();
        optional.ifPresent(userPo -> blogCommentVo.setUserId(userPo.getUserId()));

        List<CommentDto> commentList = blogCommentManager.getChildrenCommentList(blogCommentVo);

        log.info("分页查询博客第一级评论下自评论列表业务结束");
        return Result.success(commentList);
    }

}
